home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / nihcl-30.lha / nihcl-3.0 / vectest / floatvec.c < prev    next >
C/C++ Source or Header  |  1990-05-16  |  8KB  |  216 lines

  1. /* Test Vector FloatVec class
  2.  
  3.     THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A
  4.     "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE
  5.     AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT
  6.     CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE
  7.     PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO
  8.     RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.
  9.  
  10. Author:
  11.         Ted Persky
  12.     Bg. 12A, Rm. 2031
  13.     Computer Systems Laboratory
  14.     Division of Computer Research and Technology
  15.     National Institutes of Health
  16.     Bethesda, Maryland 20892
  17.     Phone: (301) 496-2963
  18.     uucp: uunet!nih-csl!tpersky
  19.     Internet:tpersky@alw.nih.gov
  20.  
  21. Function:
  22.     
  23. Modification History:
  24.     
  25. $Log:    floatvec.c,v $
  26.  * Revision 3.0  90/05/16  23:06:37  kgorlen
  27.  * Release for 1st edition.
  28.  * 
  29. */
  30. #include "IntVec.h"
  31. #include "FloatVec.h"
  32. static char rcsid[] = "$Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/vectest/RCS/floatvec.c,v 3.0 90/05/16 23:06:37 kgorlen Rel $";
  33.  
  34. static int initI[] = { 1,3,5 };
  35. static const IntVec I(initI,3);        // I = { 1 3 5 }
  36.  
  37. #ifndef BUG_OPTYPECONST
  38. static FloatVec A(10,1.0);        // A = { 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. }
  39. static FloatVec B(10,10.0,-1.0);    // B = { 10. 9. 8. 7. 6. 5. 4. 3. 2. 1. }
  40. #else
  41. static const FloatVec A(10,1.0);    // A = { 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. }
  42. static const FloatVec B(10,10.0,-1.0);    // B = { 10. 9. 8. 7. 6. 5. 4. 3. 2. 1. }
  43. #endif
  44.  
  45. void test1()
  46. {
  47.     BitVec L;
  48. // TYPEVec_CTOR_I
  49.     FloatVec C;            // C = {}
  50. // TYPEVec_CTOR_TYPEVec    
  51.     FloatVec T(A);            // T = A
  52.     cerr << "FloatVec T(A): " << T << endl;
  53. // TYPEVec_CTOR_TYPESlice
  54.     FloatVec U(A(0,5,2));        // U = { 1. 3. 5. 7. 9. }
  55.     cerr << "FloatVec U(A(0,5,2)): " << U << endl;
  56. // TYPEVec_ASN_TYPEVec
  57.     C = U;
  58.     cerr << "C = U: " << C << endl;
  59. // TYPEVec_ASN_TYPEVec
  60.     C = C;
  61.     cerr << "C = C: " << C << endl;
  62. // TYPEVec_ASN_TYPESlice
  63.     C = A(0,5,2);            // C = { 1. 3. 5. 7. 9. }
  64.     cerr << "C = A(0,5,2): " << C << endl;
  65. // TYPEVec_ASN_TYPESlice
  66.     C = A;  C = C(0,5,2);        // C = { 1. 3. 5. 7. 9. }
  67.     cerr << "C = A; C = C(0,5,2): " << C << endl;
  68. // TYPEVec_ASN_TYPESlct
  69.     C = A[A>B];            // C = { 6. 7. 8. 9. 10. }
  70.     cerr << "C = A[A>B]: " << C << endl;
  71. // TYPEVec_ASN_TYPESlct
  72.     C = A;  C = C[C>B];        // C = { 6. 7. 8. 9. 10. }
  73.     cerr << "C = A;  C = C[C>B]: " << C << endl;
  74. // TYPEVec_ASN_TYPEPick
  75.     C = A[I];            // C = { 2. 4. 6. }
  76.     cerr << "C = A[I]: " << C << endl;
  77. // TYPEVec_ASN_TYPEPick
  78.     C = A;  C = C[I];        // C = { 2. 4. 6. }
  79.     cerr << "C = A;  C = C[I]: " << C << endl;
  80. // TYPEVec_ASN_TYPE
  81.     C = 0.;
  82.     cerr << "C = 0.: " << C << endl;
  83. // TYPESlice_ASN_TYPEVec
  84.     C = A;  C(0,5,2) = FloatVec(5,-1.,0.);    // C = { -1. 2. -1. 4. -1. 6. -1. 8. -1. 10. }
  85.     cerr << "C = A;  C(0,5,2) = FloatVec(5,-1.,0.): " << C << endl;
  86. // TYPESlice_ASN_TYPESlice
  87.     C(1,5,2) = C(0,5,2);        // C = { -1. -1. -1. -1. -1. -1. -1. -1. -1. -1. }
  88.     cerr << "C(1,5,2) = C(0,5,2): " << C << endl;
  89. // TYPESlice_ASN_TYPEPick
  90.     C(0,3,1) = A[I];        // C = { 2. 4. 6. -1. -1. -1. -1. -1. -1. -1. }
  91.     cerr << "C(0,3,1) = A[I]: " << C << endl;
  92. // TYPESlice_ASN_TYPESlct
  93.     C(3,3,1) = A[A<=3.];        // C = { 2. 4. 6. 1. 2. 3. -1. -1. -1. -1. }
  94.     cerr << "C(3,3,1) = A[A<=3.]: " << C << endl;
  95. // TYPESlice_ASN_TYPE
  96.     C(0,6,1) = 0.;            // C = { 0. 0. 0. 0. 0. 0. -1. -1. -1. -1. }
  97.     cerr << "C(0,6,1) = 0.:" << C << endl;
  98. // FRIEND_OP_TYPESlice__TYPEVec
  99.     C = -A;                // C = { -1. -2. -3. -4. -5. -6. -7. -8. -9. -10 }
  100.     cerr << "C = -A: " << C << endl;
  101. // FRIEND_INCDECOP_TYPESlice__TYPEVec
  102. //    C++;                // C = { 0. -1. -2. -3. -4. -5. -6. -7. -8. -9. }
  103.     cerr << "C++: "; (C++).printOn(cerr); cerr << endl;
  104. // FRIEND_TYPESlice_OP_TYPESlice__TYPEvec
  105.     C = A-B;            // C = { -9. -7. -5. -3. -1. 1. 3. 5. 7. 9. }
  106.     cerr << "C = A-B: " << C << endl;
  107. // FRIEND_TYPESlice_OP_TYPE__TYPEVec
  108.     C = A-1.;            // C = { 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. }
  109.     cerr << "C = A-1: " << C << endl;
  110. // FRIEND_TYPE_OP_TYPESlice__TYPEVec
  111.     C = 1. + A;            // C = { 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. }
  112.     cerr << "C = 1.+A: " << C << endl;
  113. // FRIEND_TYPESlice_OP_TYPESlice__BitVec
  114.     L = A>B;
  115.     cerr << "A>B: " << L << endl;    // { 0 0 0 0 0 1 1 1 1 1 }
  116. // FRIEND_TYPESlice_OP_TYPE__BitVec
  117.     L = A<=5.;            // { 1 1 1 1 1 0 0 0 0 0 }
  118.     cerr << "A<=5.: " << L << endl;
  119. // FRIEND_TYPE_OP_TYPESlice__BitVec
  120.     L = 5.<A;            // { 0 0 0 0 0 1 1 1 1 1 }
  121.     cerr << "5.<A: " << L << endl;
  122. // FRIEND_TYPESlice_ASNOP_TYPESlice
  123.     C = A;  C += A;            // { 2. 4. 6. 8. 10. 12. 14. 16. 18. 20. }
  124.     cerr << "C = A;  C += A: " << C << endl;
  125. // FRIEND_TYPESlice_ASNOP_TYPE
  126.     C -= 1.;            // { 1. 3. 5. 7. 9. 11. 13. 15. 17. 19. }
  127.     cerr << "C -= 1.: " << C << endl;
  128. // TYPEPick_ASN_TYPEVec
  129.     C = A;  C[I] = FloatVec(3,-1.,0.);    // { 1. -1. 3. -1. 5. -1. 7. 8. 9. 10. }
  130.     cerr << "C = A; C[I] =  FloatVec(3,-1.,0.): " << C << endl;
  131. // TYPEPick_ASN_TYPEPick
  132.     C[I] = A[I];            // { 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. }
  133.     cerr << "C[I] = A[I]: " << C << endl;
  134. // TYPEPick_ASN_TYPESlct
  135.     C[I] = A[A<=3.];        // C = { 1. 1. 3. 2. 5. 3. 7. 8. 9. 10. }
  136.     cerr << "C[I] = A[A<=3.]: " << C << endl;
  137. // TYPEPick_ASN_TYPESlice
  138.     C[I] = A(0,3,2);        // C = { 1. 1. 3. 3. 5. 5. 7. 8. 9. 10. }
  139.     cerr << "C[I] = A(0,3,2): " << C << endl;
  140. // TYPEPick_ASN_TYPE
  141.     C[I] = -1.;            // C = { 1. -1. 3. -1. 5. -1. 7. 8. 9. 10. }
  142.     cerr << "C[I] = -1.: " << C << endl;
  143. // TYPESlice_CTOR_TYPEPick
  144.     C = A[I]+B[I];            // C = { 11. 11. 11. }
  145.     cerr << "C = A[I]+B[I]: " << C << endl;
  146. }
  147.  
  148. void test2()
  149. {
  150.     BitVec L;
  151. // TYPEVec_CTOR_I
  152.     FloatVec C;            // C = {}
  153. // TYPESlct_ASN_TYPEVec
  154.     C = A;  C[A<=5.] = FloatVec(5,-1.,0.);    // C = { -1. -1. -1. -1. -1. 6. 7. 8. 9. 10. }
  155.     cerr << "C = A; C[A<=5.] = FloatVec(5,-1.,0.): " << C << endl;
  156. // TYPESlct_ASN_TYPEPick
  157.     C = A;  C[A<=3.] = A[I];    // C = { 2. 4. 6. 4. 5. 6. 7. 8. 9. 10. }
  158.     cerr << "C = A; C[A<=3.] = A[I]: " << C << endl;
  159. // TYPESlct_ASN_TYPESlct
  160.     C = A;  C[A<=5.] = B[A<=5.];    // C = { 10. 9. 8. 7. 6. 6. 7. 8. 9. 10. }
  161.     cerr << "C = A; C[A<=5.] = B[A<=5.]: " << C << endl;
  162. // TYPESlct_ASN_TYPESlice
  163.     C[A<=5.] = A(0,5,1);        // C = { 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. }
  164.     cerr << "C = A; C[A<=5.] = A(0,5,1): " << C << endl;
  165. // TYPESlct_ASN_TYPE
  166.     C[A<=5.] = 0.;            // C = { 0. 0. 0. 0. 0. 6. 7. 8. 9. 10. }
  167.     cerr << "C = A; C[A<=5.] = 0.: " << C << endl;
  168. // TYPESlice_CTOR_TYPESlct
  169.     C = A[A<=5.] + B[B<=5.];    // C = { 6. 6. 6. 6. 6. }
  170.     cerr << "C = A[A<=5.] + B[B<=5.]: " << C << endl;
  171. // FRIEND_abs_TYPESlice
  172.     C = abs(FloatVec(10,-5));    // C = { 5. 4. 3. 2. 1. 0. 1. 2. 3. 4 }
  173.     cerr << "abs(FloatVec(10,-5)): " << C << endl;
  174. // FRIEND_atan2_TYPESlice_TYPESlice
  175.     C = atan2(FloatVec(10,1),FloatVec(10,10,-1));
  176.     cerr << "atan2(FloatVec(10,1),FloatVec(10,10,-1)): " << C << endl;
  177. // FRIEND_pow_TYPESlice_TYPESlice
  178.     C = pow(FloatVec(10,1),FloatVec(10,2,0));
  179.     cerr << "pow(FloatVec(10,1),FloatVec(10,2,0)): " << C << endl;
  180. // FRIEND_cumsum_TYPESlice
  181.     C = cumsum(FloatVec(10,1));
  182.     cerr << "cumsum(FloatVec(10,1)): " << C << endl;
  183. // FRIEND_delta_TYPESlice
  184.     C = delta(C);
  185.     cerr << "delta(cumsum(FloatVec(10,1))): " << C << endl;
  186. // FRIEND_dot_TYPESlice_TYPESlice
  187.     cerr << "dot(A,B): " << dot(A,B) << endl;
  188. // FRIEND_max_TYPESlice
  189.     cerr << "max(A): " << max(A) << endl;
  190. // FRIEND_min_TYPESlice
  191.     cerr << "min(A): " << min(A) << endl;
  192. // FRIEND_prod_TYPESlice
  193.     cerr << "prod(A): " << prod(A) << endl;
  194. // FRIEND_reverse_TYPESlice
  195.     C = reverse(A);
  196.     cerr << "reverse(A): " << C << endl;
  197. // FRIEND_sqrt_TYPESlice
  198.     C = sqrt(A);
  199.     cerr << "sqrt(A): " << C << endl;
  200. // FRIEND_sum_TYPESlice
  201.     cerr << "sum(A): " << sum(A) << endl;
  202. }
  203.  
  204. main()
  205. {
  206.     cerr << "Test Vector FloatVec class\n";
  207. // TYPEVec_CTOR_TYPEPTR_I
  208.     cerr << "IntVec I(3,1,2): " << I << endl;
  209. // TYPEVec_CTOR_I_TYPE_TYPE
  210.     cerr << "FloatVec A(10,1.0): " << A << endl;
  211. // TYPEVec_CTOR_I_TYPE_TYPE
  212.     cerr << "FloatVec B(10,10.0,-1.0): " << B << endl;
  213.     test1();
  214.     test2();
  215. }
  216.